package com.example.sxt_practise.GOF23.singleton;

/**
 * 双重检测锁
 * 提高了执行效率,不必每次获取对象都进行同步,只有第一次才同步
 * 由于编译优化原因和JVM底层内部模型原因,偶尔出问题
 * @author gaofeng
 * @date 2022年05月18日 21:00
 */
public class SingletonTest03 {
    private static SingletonTest03 instance = null ;

    public static SingletonTest03 getInstance() {
        if (instance == null) {
            SingletonTest03 sc ;
            synchronized (SingletonTest03.class) {
                sc = instance ;
                if (sc == null) {
                    synchronized (SingletonTest03.class) {
                        if (sc == null) {
                            sc = new SingletonTest03() ;
                        }
                    }
                    instance = sc ;
                }
            }
        }
        return instance ;
    }

    private SingletonTest03() {
    }
}
